From the standard microwave oven to the sophisticated database retrieval system, software is being developed at an increasingly rapid rate and the revenues generated from it are exponentially increasing. The software development process, however, does not come cheaply. Software companies spend considerable funds in research and development (R&D) for the conception and implementation of software. Software systems developed by such companies may range from control software, such as the microwave controller or telephone system, to application software, such as spreadsheets or word processors. The maintenance of such systems has also proven to be quite costly.
With this kind of economic investment, techniques are needed to improve the software development process such as to be able to produce reliable software in a more time efficient manner. In particular, tools are needed to allow software developers to trace through the execution of portions of their application and monitor the control flow and the state of different modules in a software system. The tools are commonly referred to as "debuggers" because they permits the software developer to eliminate bugs, which are errors in a software program, from their code.
In a typical debugger system, the user initiates the debugging process by invoking the debugger with the entity he wishes to trace. Typically, the flow of control is examined by the user, who is usually the software developer, by means of breakpoints, which are interruptions in the flow of execution, or by placing entries in a log file, which provides the value, time and sequence of execution of the entities being traced. The problem with the debuggers mentioned above is that they operate on applications running on single nodes. Essentially all the entities being traced are operating on the same node as the debugger. The majority of telecommunication applications, such as those present in telephone networks, operate in distributed computing environments where multiple nodes are involved in the execution of the program and the available debuggers do not allow tracing of entities running on distributed environments.
Thus, there exists a need in the industry to provide software-tracing techniques such as to obtain better debugger functionality particularly applicable to distributed systems.